/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;

import Entity.PublikasiHaki;
import Entity.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import library.Koneksi;

/**
 *
 * @author user
 * model untuk menangani operasi database berkaitan dengan publikasi karya yang mendapat HaKI
 */
public class DaftarPublikasiHaki {

    PublikasiHaki publikasiHaki;

    //method digunakan untuk mengambil daftar publikasi karya yang mendapat HaKI berdasarkan pemilik karya, judul, status kemajuan, dan periode karya mendapat HaKI
    public List<PublikasiHaki> ambilDaftarPublikasiHaki(String pemilikHaki, String judul, String statusKemajuan, String periodeAwal, String periodeAkhir) {

        List<PublikasiHaki> daftarPublikasiHaki = new ArrayList<PublikasiHaki>();

        String sql;
        String where = "";
        
        if (!pemilikHaki.isEmpty()) {
            sql = "SELECT * FROM karya_haki, dosen_pemilik_haki "
                    + "where karya_haki.ID_KARYA_HAKI = dosen_pemilik_haki.ID_KARYA_HAKI "
                    + "AND dosen_pemilik_haki.ID_USER = '" + pemilikHaki + "' ";

            if (!judul.isEmpty()) {
                sql = sql + "and karya_haki.JUDUL_PATEN_HAKI LIKE '%" + judul + "%' ";
            }
            if (!statusKemajuan.isEmpty()) {
                sql = sql + "and karya_haki.STATUS_KEMAJUAN LIKE '%" + statusKemajuan + "%' ";
            }
            if (!periodeAwal.isEmpty()) {
                sql = sql + "and YEAR(karya_haki.TANGGAL_PENDAFTARAN_PATEN) BETWEEN '" + periodeAwal + "' AND '" + periodeAkhir + "' ";
            }

        } else {
            
            sql = "SELECT * FROM karya_haki ";

            if (!judul.isEmpty()) {
                
                if(where.isEmpty()){
                    where = "where ";
                } else {
                    where = "and ";
                }
                
                sql = sql + where + "karya_haki.JUDUL_PATEN_HAKI LIKE '%" + judul + "%' ";
            }
            if (!statusKemajuan.isEmpty()) {
                
                if(where.isEmpty()){
                    where = "where ";
                } else {
                    where = "and ";
                }
                
                sql = sql + where + "karya_haki.STATUS_KEMAJUAN LIKE '%" + statusKemajuan + "%' ";
            }
            if (!periodeAwal.isEmpty()) {
                
                if(where.isEmpty()){
                    where = "where ";
                } else {
                    where = "and ";
                }
                
                sql = sql + where + "YEAR(karya_haki.TANGGAL_PENDAFTARAN_PATEN) BETWEEN '" + periodeAwal + "' AND '" + periodeAkhir + "' ";
            }

        }


        sql = sql + "ORDER BY karya_haki.TANGGAL_PENDAFTARAN_PATEN DESC";
        System.out.println(sql);
        PreparedStatement st = null;
        ResultSet rs = null;
        try {

            Connection conn = Koneksi.getKoneksi();

            st = conn.prepareStatement(sql);
            rs = st.executeQuery();

            while (rs.next()) {
                this.publikasiHaki = new PublikasiHaki();

                if (!pemilikHaki.isEmpty()) {
                    publikasiHaki.setUniqueKey(rs.getString("STATUS_PENGUPLOAD"));
                }

                User user = new User();
                user.setIdUser(rs.getString("PENGUPLOAD"));

                publikasiHaki.setUserPengupload(user);

                publikasiHaki.setIdKaryaHaki(rs.getInt("ID_KARYA_HAKI"));
                publikasiHaki.setJudulPatenHaki(rs.getString("JUDUL_PATEN_HAKI"));
                publikasiHaki.setNoPaten(rs.getString("NO_PATEN"));
                publikasiHaki.setTanggalPendaftaranPaten(rs.getString("TANGGAL_PENDAFTARAN_PATEN"));
                publikasiHaki.setStatusKemajuan(rs.getString("STATUS_KEMAJUAN"));

                daftarPublikasiHaki.add(publikasiHaki);
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPublikasiHaki.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPublikasiHaki.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                rs.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPublikasiHaki.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return daftarPublikasiHaki;

    }

    //method digunakan untuk mengambil detail publikasi karya ilmiah yang mendapat HaKI
    public PublikasiHaki detailPublikasiHaki(PublikasiHaki publikasiHaki) {

        String sql;

        if (publikasiHaki.getUniqueKey() != "") {
            sql = "SELECT * FROM karya_haki where UNIQUEKEY='" + publikasiHaki.getUniqueKey() + "'";
        } else {
            sql = "SELECT * from karya_haki where ID_KARYA_HAKI=" + publikasiHaki.getIdKaryaHaki();
        }
        System.out.println(sql);
        PreparedStatement st = null;
        ResultSet rs = null;
        try {

            Connection conn = Koneksi.getKoneksi();

            st = conn.prepareStatement(sql);
            rs = st.executeQuery();

            while (rs.next()) {
                this.publikasiHaki = new PublikasiHaki();

                User user = new User();
                user.setIdUser(rs.getString("PENGUPLOAD"));

                this.publikasiHaki.setUserPengupload(user);

                this.publikasiHaki.setIdKaryaHaki(rs.getInt("ID_KARYA_HAKI"));
                this.publikasiHaki.setJudulPatenHaki(rs.getString("JUDUL_PATEN_HAKI"));
                this.publikasiHaki.setNoPaten(rs.getString("NO_PATEN"));
                this.publikasiHaki.setTanggalPendaftaranPaten(rs.getString("TANGGAL_PENDAFTARAN_PATEN"));
                this.publikasiHaki.setStatusKemajuan(rs.getString("STATUS_KEMAJUAN"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPublikasiHaki.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPublikasiHaki.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                rs.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPublikasiHaki.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return this.publikasiHaki;

    }

    //method digunakan untuk menghapus data publikasi karya ilmiah yang mendapat HaKI
    public boolean hapusPublikasiHaki(PublikasiHaki publikasiHaki) {

        boolean hasil = true;

        PreparedStatement st = null;

        String sql = "DELETE FROM karya_haki WHERE ID_KARYA_HAKI = " + publikasiHaki.getIdKaryaHaki();

        Connection conn = Koneksi.getKoneksi();
        try {
            st = conn.prepareStatement(sql);
            int rs = st.executeUpdate();
            if (rs > 0) {
                hasil = true;
            } else {
                hasil = false;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPublikasiHaki.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPublikasiHaki.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return hasil;

    }

    //method digunakan untuk menambah data publikasi karya ilmiah yang mendapat HaKI
    public boolean tambahPublikasiHaki(PublikasiHaki publikasiHaki) {

        boolean hasil = false;
        this.publikasiHaki = publikasiHaki;

        String sql = "insert into karya_haki(JUDUL_PATEN_HAKI, NO_PATEN, "
                + "TANGGAL_PENDAFTARAN_PATEN, STATUS_KEMAJUAN, "
                + "PENGUPLOAD, UNIQUEKEY) "
                + "value ('" + this.publikasiHaki.getJudulPatenHaki()
                + "','" + this.publikasiHaki.getNoPaten()
                + "','" + this.publikasiHaki.getTanggalPendaftaranPaten()
                + "','" + this.publikasiHaki.getStatusKemajuan()
                + "','" + this.publikasiHaki.getUserPengupload().getIdUser()
                + "','" + this.publikasiHaki.getUniqueKey() + "')";
        System.out.println(sql);
        PreparedStatement st = null;
        try {
            Connection conn = Koneksi.getKoneksi();
            st = conn.prepareStatement(sql);
            int rs = st.executeUpdate(sql);
            if (rs > 0) {
                hasil = true;
            } else {
                return false;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPublikasiHaki.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPublikasiHaki.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return hasil;

    }

    //method digunakan untuk mengubah data publikasi karya ilmiah yang mendapat HaKI
    public boolean ubahPublikasiHaki(PublikasiHaki publikasiHaki) {

        boolean hasil = false;
        this.publikasiHaki = publikasiHaki;

        String sql = "update karya_haki SET "
                + "JUDUL_PATEN_HAKI = '" + this.publikasiHaki.getJudulPatenHaki()
                + "', NO_PATEN = '" + this.publikasiHaki.getNoPaten()
                + "', TANGGAL_PENDAFTARAN_PATEN = '" + this.publikasiHaki.getTanggalPendaftaranPaten()
                + "', PENGUPLOAD = '" + this.publikasiHaki.getUserPengupload().getIdUser()
                + "', STATUS_KEMAJUAN = '" + this.publikasiHaki.getStatusKemajuan()
                + "' where ID_KARYA_HAKI = " + this.publikasiHaki.getIdKaryaHaki();
        System.out.println(sql);
        PreparedStatement st = null;

        try {
            Connection conn = Koneksi.getKoneksi();
            st = conn.prepareStatement(sql);
            int rs = st.executeUpdate();
            if (rs > 0) {
                hasil = true;
            } else {
                hasil = false;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPublikasiHaki.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println(ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPublikasiHaki.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return hasil;

    }
}
